Skip to main content

Solusi: Membuat Kalkulator di Sui

Saya harap kamu sudah menyelesaikan solusinya, tetapi mari kita bahas solusinya dan sekalian mendeploy-nya di Sui.

Kode lengkap

Kode lengkap untuk Kalkulator adalah:

module calculator::calculator{

public struct Output has key, store{
id: UID,
result: u64,

}

entry fun start (ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: 0,
};

transfer::public_transfer(output, tx_context::sender(ctx));

}

entry fun add (a:u64, b:u64, ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: a + b,
};

transfer::public_transfer(output, tx_context::sender(ctx));
}

entry fun sub (a:u64, b:u64, ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: a - b,
};

transfer::public_transfer(output, tx_context::sender(ctx));
}

entry fun mul (a:u64, b:u64, ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: a * b,
};

transfer::public_transfer(output, tx_context::sender(ctx));
}

entry fun div (a:u64, b:u64, ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: a / b,
};

transfer::public_transfer(output, tx_context::sender(ctx));
}

}

Penjelasan

Mari kita telusuri kodenya:

    public struct Output has key, store{
id: UID,
result: u64,

}

Mendefinisikan struct:

  • Kita mendefinisikan struct bernama Output menggunakan kata kunci struct.
  • Struct ini memiliki dua field:
    • id: Pengenal unik (UID) untuk setiap instance objek Output.
    • result: Field ini menyimpan bilangan bulat tak bertanda 64-bit (u64) yang mewakili hasil perhitungan.
    entry fun start (ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: 0,
};

transfer::public_transfer(output, tx_context::sender(ctx));

}

Mendefinisikan fungsi start:

  • Kita membuat fungsi entri publik bernama start yang menerima referensi mutable ke TxContext sebagai argumen.
  • Di dalam fungsi start:
    • Kita membuat objek Output baru bernama output menggunakan let output = Output { id: object::new(ctx), result: 0 };
    • Kita set field id dari objek output ke pengenal unik yang dihasilkan dengan object::new(ctx).
    • Kita inisialisasi field result menjadi 0, seolah-olah kita memulai kalkulator dari nol.
    • Terakhir, kita menggunakan transfer::public_transfer untuk mentransfer objek output kepada seseorang, dengan menentukan pengirim sebagai tx_context::sender(ctx).
    entry fun add (a:u64, b:u64, ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: a + b,
};

transfer::public_transfer(output, tx_context::sender(ctx));
}

Mendefinisikan fungsi add:

  • Ini adalah fungsi entri publik bernama add.
  • Fungsi ini menerima dua bilangan bulat tak bertanda 64-bit (a dan b) sebagai input dan referensi mutable ke TxContext (ctx) untuk menangani konteks transaksi.
  • Tujuan: Fungsi ini dimaksudkan untuk menjumlahkan dua angka dan menyimpan hasilnya dalam objek Output.

Di dalam fungsi:

  • let output = Output { id: object::new(ctx), result: a + b };
    • Kita membuat objek Output baru bernama output.
    • Kita memberikan pengenal unik (UID) ke objek output menggunakan object::new(ctx).
    • Kita menghitung jumlah a dan b lalu menyimpannya di field result dari objek output.
  • transfer::public_transfer(output, tx_context::sender(ctx));
    • Kita mentransfer objek output kepada seseorang, dengan menentukan pengirim sebagai tx_context::sender(ctx).
    entry fun sub (a:u64, b:u64, ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: a - b,
};

transfer::public_transfer(output, tx_context::sender(ctx));
}

Mendefinisikan fungsi sub:

  • Ini adalah fungsi entri publik bernama sub.
  • Fungsi ini menerima dua bilangan bulat tak bertanda 64-bit (a dan b) sebagai input dan referensi mutable ke TxContext (ctx) untuk menangani konteks transaksi.
  • Tujuan: Fungsi ini dimaksudkan untuk mengurangkan dua angka dan menyimpan hasilnya dalam objek Output.

Di dalam fungsi:

  • let output = Output { id: object::new(ctx), result: a + b };
    • Kita membuat objek Output baru bernama output.
    • Kita memberikan pengenal unik (UID) ke objek output menggunakan object::new(ctx).
    • Kita menghitung pengurangan dengan mengurangkan b dari a dan menyimpannya di field result dari objek output.
  • Terakhir, kita mentransfer objek output kepada seseorang, dengan menentukan pengirim menggunakan tx_context::sender(ctx).
    entry fun mul (a:u64, b:u64, ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: a * b,
};

transfer::public_transfer(output, tx_context::sender(ctx));
}

Mendefinisikan fungsi mul:

  • Ini adalah fungsi mul, yang menangani perkalian.
  • Fungsi ini menerima dua bilangan bulat tak bertanda 64-bit, a dan b, serta konteks transaksi ctx.

Di dalam fungsi:

  • Kita membuat objek Output baru.
  • Kita menghitung hasil dengan mengalikan a dan b.
  • Objek output menyimpan hasil ini.
  • Kita mentransfer objek output, dengan menentukan pengirim menggunakan tx_context::sender(ctx).
    entry fun div (a:u64, b:u64, ctx: &mut TxContext){
let output = Output{
id: object::new(ctx),
result: a / b,
};

transfer::public_transfer(output, tx_context::sender(ctx));
}

Mendefinisikan fungsi div:

  • Fungsi div ini menangani pembagian.
  • Fungsi ini menerima dua bilangan bulat tak bertanda 64-bit, a dan b, serta konteks transaksi ctx.

Di dalam fungsi:

  • Kita membuat objek Output baru.
  • Kita menghitung hasil dengan membagi a dengan b.
  • Objek output menyimpan hasil ini.
  • Kita mentransfer objek output, dengan menentukan pengirim menggunakan tx_context::sender(ctx).

Kode ini mendefinisikan program kalkulator dengan struct Output untuk menyimpan hasil dan berbagai operasi aritmetika (penjumlahan, pengurangan, perkalian, dan pembagian) sebagai fungsi entri publik. Setiap fungsi membuat objek Output dengan hasil perhitungan dan mentransfernya menggunakan transfer.

Mendeploy kontrak

Ganti [YOUR_ADDRESS] pada perintah berikut dengan alamat akunmu lalu jalankan:

sui client switch --address [YOUR_ADDRESS]

Jalankan perintah berikut agar kita bisa deploy di Sui devnet:

sui client switch --env devnet

Untuk memublikasikan kontrak, salin path absolut file Hello.move-mu. Ganti [YOUR_PATH] dengan path absolut file tersebut dan jalankan perintah berikut:

sui client publish --gas-budget 10000000 [YOUR_PATH]

Kita akan mendapat keluaran yang panjang, tetapi gulir ke awal output dan salin Transaction Digest. Buka Sui Explorer. Tempel Transaction Digest di bilah pencarian untuk menemukan transaksi kamu di Sui Explorer.

Sekarang klik alamat paket dari modul kalkulator:

Frame 3560370.jpg

Kamu akan melihat semua fungsi seperti di bawah ini:

Frame 3560370 (1).jpg

Sekarang silakan berinteraksi dengan fungsi-fungsinya dan selamat mencoba~

Selesai

Dalam pelajaran ini, kita belajar cara membuat kontrak Kalkulator menggunakan Move. Kita membahas struktur kode dan tujuan setiap fungsi. Kita juga memberikan instruksi untuk mendeploy kontrak di Sui Devnet. Silakan eksplor dan berinteraksi dengan fungsi-fungsi dalam kontrak. Selamat ngoding!